#!/usr/bin/env node
//网课
// const fs = require('fs'); // 引入文件系统模块

// const width = 16; // 设置图像的宽度
// const height = 16; // 设置图像的高度

// const pixeByteSize = width * height * 4; // 计算像素数据的字节大小（每个像素4个字节）
// const totalSize = pixeByteSize + 54; // 计算整个BMP文件的总大小（包括文件头）

// let buf = new Buffer(totalSize); // 创建一个缓冲区来存储BMP文件内容

// buf.fill(0); // 用0填充缓冲区，初始化为全0

// // 写入BMP文件头信息
// buf.write('BM', 0); // 写入文件类型标记 "BM"
// buf.writeUInt32LE(totalSize, 0x02); // 写入文件总大小
// buf.writeUInt32LE(54, 0x0a); // 写入像素数据的起始位置（相对于文件开始的偏移量）
// buf.writeUInt32LE(40, 0x0e); // 写入信息头的大小
// buf.writeUInt32LE(1, 0x1a); // 写入图像的计划数（对于BMP通常是1）
// buf.writeUInt32LE(32, 0x1c); // 写入每个像素的位数（32位）
// buf.writeUInt32LE(pixeByteSize, 0x22); // 写入像素数据的大小
// buf.writeUInt32LE(width, 0x12); // 写入图像的宽度
// buf.writeUInt32LE(height, 0x16); // 写入图像的高度

// // 写入像素数据
// for (let i = 54; i < totalSize; i += 4) {
//   buf.writeUInt32LE(0xff0000ff, i); // 写入蓝色（0xff0000ff）像素数据
// }

// fs.writeFile('./out.bmp', buf, function (err) {
//   if (err != null) {
//     console.error(err); // 如果写入文件时出错，打印错误信息
//     process.exit(1); // 退出程序
//   }
// });

const fs = require('fs'); // 引入文件系统模块

// 检查命令行参数的数量
if (process.argv.length !== 3) {
  console.error('Usage: node script.js <file_name>');
  process.exit(1); // 参数不正确时，以退出码 1 退出
}

// 获取命令行参数中的文件名
const fileName = process.argv[2];

const width = 16; // 设置图像的宽度
const height = 16; // 设置图像的高度

const pixelByteSize = width * height * 4; // 计算像素数据的字节大小（每个像素4个字节）
const totalSize = pixelByteSize + 54; // 计算整个BMP文件的总大小（包括文件头）

let buf = Buffer.alloc(totalSize); // 创建一个缓冲区来存储BMP文件内容

buf.fill(0); // 用0填充缓冲区，初始化为全0

// 写入BMP文件头信息
buf.write('BM', 0); // 写入文件类型标记 "BM"
buf.writeUInt32LE(totalSize, 0x02); // 写入文件总大小
buf.writeUInt32LE(54, 0x0a); // 写入像素数据的起始位置（相对于文件开始的偏移量）
buf.writeUInt32LE(40, 0x0e); // 写入信息头的大小
buf.writeUInt32LE(1, 0x1a); // 写入图像的计划数（对于BMP通常是1）
buf.writeUInt32LE(32, 0x1c); // 写入每个像素的位数（32位）
buf.writeUInt32LE(pixelByteSize, 0x22); // 写入像素数据的大小
buf.writeUInt32LE(width, 0x12); // 写入图像的宽度
buf.writeUInt32LE(height, 0x16); // 写入图像的高度

// 写入像素数据
for (let i = 54; i < totalSize; i += 4) {
  buf.writeUInt32LE(0xffff0000, i); // 写入红色（0xffff0000）像素数据
}

// 写入文件
fs.writeFile(fileName, buf, function (err) {
  if (err != null) {
    console.error(err); // 如果写入文件时出错，打印错误信息
    process.exit(1); // 退出程序
  }
  console.log(`Image saved as ${fileName}`);
});